package com.zbkj.front.service;

import com.github.pagehelper.PageInfo;
import com.zbkj.common.model.order.OrderDetail;
import com.zbkj.common.model.order.OrderInfo;
import com.zbkj.common.model.user.User;
import com.zbkj.common.request.PageParamRequest;
import com.zbkj.common.request.order.*;
import com.zbkj.common.response.UploadResponse;
import com.zbkj.common.response.order.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @Auther:
 * @Date: 2024/9/15 16:43
 * @Description:
 */
public interface OrderHandleService {

    UserRechargeResponse getUserRechargeInfo();

    PageInfo<ClientOrderResponse> getOrderList(PageParamRequest paramRequest);

    OrderSucceResponse orderSave(ClientOrderSaveRequest saveRequest);

    ReportOrderPayResonse getReportPayConf(Long projectId);

    //ReportOrderPayResonse getReportPayFlowPacketConf(Long projectId);

    OrderSucceResponse reportOrderSave(ClientReportOrderSaveRequest saveRequest);

    void reportPayFlowPacketSave(Long projectId);

    void orderSaveHandle(OrderInfo orderInfo, List<OrderDetail> orderDetailList);

    ClientOrderResponse getOrderPayment(String orderNo);

    UploadResponse payVoucheUpload(MultipartFile multipartFile);

    void payVoucheSave(OrderPayVoucheSaveRequest saveRequest);





    /**
     * 手动取消
     * @param orderNo
     */
    void cancel(String orderNo);

    /**
     * 超时自动取消
     * @param orderId
     * @return
     */
    boolean automCancel(Long orderId);

    boolean orderCancelHandle(OrderInfo orderInfo, int cancelStatus);

    void registeGiftYearCardHandle(User user);


    void registeGiftTryCardHandle(User user);



    void orderStatusUpdate(OrderInfo orderInfo, Integer modifyStatus, List<Integer> checkStatusList, String rejectReason);

    void orderApprovalOpen(User user, OrderInfo orderInfo, List<OrderDetail> orderDetailList);


    PageInfo<InvoiceListResponse> invoiceList(InvoiceListQueryRequest invoiceListQueryRequest);

    boolean apply(InvoiceApplySaveRequest invoiceApplySaveRequest);

    PageInfo<InvoiceHistoryListResponse> invoiceHistoryList(PageParamRequest pageParamRequest);
}
